home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.06 Jun 90 / ANSI Library Code / CodeDispatchLib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-24  |  1.2 KB  |  58 lines  |  [TEXT/KAHL]

  1. /***********************************************
  2.  *
  3.  *    CodeDispatchLib.c
  4.  *
  5.  *    Library code and dispatch table for code resource library.
  6.  *    Written by David Burggraaf, 1990.
  7.  *
  8.  ***********************************************/
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13.  
  14. #define NOCODELIBDEF
  15. #include "CodeLib.h"
  16.  
  17. /*#define MULTISEG*/
  18.  
  19. typedef void (*Function)(void);
  20.  
  21. long returnAddr, oldA4;
  22. int funcIndex;
  23. void dispatchErr(void);
  24. Function funcTable[ROUTINES+1];
  25.     
  26. void main(/*CodeLib routine*/void)
  27.     {
  28.     asm    {
  29.         move.l a4, a1;        /*    setup a4    */
  30.         move.l a0, a4;
  31.         move.l a1, oldA4;
  32.         };
  33.     funcTable[CLdispatchErr]=dispatchErr;
  34.     funcTable[CLatoi]=(Function)atoi;
  35.     funcTable[CLatol]=(Function)atol;
  36.     funcTable[CLsprintf]=(Function)sprintf;
  37.     funcTable[CLsrand]=(Function)srand;
  38.     funcTable[CLstrcpy]=(Function)strcpy;
  39.     asm    {
  40.         move.l (a7)+, returnAddr;    /*    save return address    */
  41.         move.w (a7)+, a1;            /*    remove index    */
  42.         lea funcTable, a0;        /*    do jump to indexed subroutine    */
  43.         jsr ([0,a0,a1.w*4],0);
  44.         move.w a1, -(a7);            /*    restore stack and return    */
  45.         move.l returnAddr, -(a7);
  46.         move.l oldA4, a4;            /*    restore a4    */
  47.         }
  48. #ifdef MULTISEG
  49.     UnloadA4Seg(0L);
  50. #endif
  51.     }
  52.  
  53. void dispatchErr(void)
  54.     {
  55.     SysBeep(5);
  56.     }
  57.  
  58.